import logging
from configparser import ConfigParser
from typing import Optional

from LMs import LLM  # 从 LMs.py 导入 LLM 类

# 配置日志
logger = logging.getLogger(__name__)
logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
                    datefmt="%Y-%m-%d %H:%M:%S",
                    level=logging.INFO)

# 全局变量，用于缓存类别和LLM客户端实例
LLM_MODEL: Optional[LLM] = None


# 初始化模型服务
def init_llm_model():
    global LLM_MODEL
    try:
        config = ConfigParser()
        config.read('config.ini', encoding='utf-8')
        # 初始化LLM客户端 (使用 [llm_model] Abschnitt aus config.ini)
        # 您可以根据需要调整为从特定的分类LLM配置部分读取
        llm_base_url = config.get("llm_model", "base_url", fallback="http://localhost:11435/v1")
        llm_api_key = config.get("llm_model", "api_key", fallback="anykey")
        llm_model_name = config.get("llm_model", "model_name", fallback="Qwen2.5:7B-Instruct")
        LLM_MODEL = LLM(base_url=llm_base_url, api_key=llm_api_key, modelname=llm_model_name)
        logger.info(f"Classify LLM客户端初始化完成，模型名称： {llm_model_name}")
    except Exception as e:
        logger.error(f"Classify LLM客户端初始化失败: {e}", exc_info=True)
        return


init_llm_model()

# 生成相关词
def generate_words(instr: str) -> Optional[str]:
    prompt = f"""/no_think 
    任务：对输入词汇或者短语进行相关词推荐，相关词可以是近义词、同义词、同领域词等
    输入词汇：{instr}
    要求：最多返回10个词组，每个词组之间使用空格分隔"""
    try:
        #raw_response = LLM_MODEL.generate_response(prompt, stream=False)
        raw_response ="工业物联网 智能制造 数字化转型 智能工厂 产业互联网 物联网技术 工业40 制造业升级 信息化制造 智能制造系统"
        logger.info(f"原始响应：'{raw_response}'")
        # 强化清洗逻辑
        #cleaned_response = re.sub(r'[^\w\u4e00-\u9fa5/]', '', raw_response.strip())
        cleaned_response = raw_response.replace('think/think', '')
        print(f"清洗后的响应：'{cleaned_response}'")
        return cleaned_response
    except Exception as e:
        logger.error(f"generate_words：调用LLM进行推荐相关词时出错: {e}", exc_info=True)
        return "错误：推荐相关词发生服务器内部错误"

if __name__ == '__main__':

    print("正在测试服务模块...")
